package com.yueqian.sc.web.servlet;

import com.google.gson.Gson;
import com.mysql.jdbc.StringUtils;
import com.yueqian.sc.bean.Users;
import com.yueqian.sc.dao.IUserDao;
import com.yueqian.sc.dao.impl.UserDao;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * 登录的servlet
 */
@WebServlet("/user/*")
public class UserServlet extends BaseServlet{
    private IUserDao userDao = new UserDao();
    /**
     * 用户登录
     * 请求的URL：/SelectCourse2/user/login
     * 请求的方式：POST
     * 请求的类型：表单
     * 返回的类型：JSON
     *
     * @param request
     * @param response
     */
    public void login(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 创建一个Map集合，存放响应结果
        Map<String,Object> result = new HashMap<>();
        // 处理编码
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        // 获取前端的输入 绑定 login.html表单中的name=""
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String vcode = request.getParameter("vcode");
        // 非空校验（可加可不加）
        if(StringUtils.isNullOrEmpty(username)){
            result.put("code",-1);
            result.put("msg","账户不能为空");
        } else if(StringUtils.isNullOrEmpty(password)){
            result.put("code",-1);
            result.put("msg","密码不能为空");
        } else if(StringUtils.isNullOrEmpty(vcode)){
            result.put("code",-1);
            result.put("msg","验证码不能为空");
        } else{
            // 获取服务端自己保存的验证码
            HttpSession session = request.getSession();
            String serverVcode = (String) session.getAttribute("vCode");
            System.out.println("-----------------获取session:"+session.getId()+" "+serverVcode);
            // 校验前后端的验证码是否一致，不区分大小写
            if(serverVcode==null || !serverVcode.equalsIgnoreCase(vcode)){
                result.put("code",-1);
                result.put("msg","验证码输入错误");
            }else{
                // 登录逻辑处理
                Users u = new Users();
                u.setUsername(username);
                u.setPassword(password);
                // 访问数据库
                Users query = userDao.login(u);
                System.out.println("登录返回的信息："+query);
                if(query!=null){// 登录成功
                    // 登录成功之后，保存登录的用户信息
                    session.setAttribute("user",query);
                    result.put("code",1);
                    result.put("msg","用户登录成功！");
                    result.put("result",query);
                }else{// 登录失败
                    result.put("code",0);
                    result.put("msg","用户登录失败！");
                }
            }
        }
        // 响应结果
        response.getWriter().write(new Gson().toJson(result));
    }
    /**
     * 用户登录
     * 请求的URL：/SelectCourse2/user/updatePwd
     * 请求的方式：POST
     * 请求的类型：表单
     * 返回的类型：JSON
     *
     * @param request
     * @param response
     */
    public void updatePwd(HttpServletRequest request,HttpServletResponse response) throws IOException{
        // 创建一个Map集合，存放响应结果
        Map<String,Object> result = new HashMap<>();
        // 处理编码
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        // 从本地保存的session中获取用户编号
        Users u = (Users) request.getSession().getAttribute("user");
        int userId = 0;
        if(u!=null){
            userId = u.getUserId();
        }
        // 接收前端传过来的数据
        String oldPwd = request.getParameter("oldPassword");
        String newPwd = request.getParameter("newPassword");
        // 校验旧密码是否存在
        if(oldPwd!=null && userDao.checkOldPwd(userId,oldPwd)){// 旧密码正确
            // 修改密码
            if(!StringUtils.isNullOrEmpty(newPwd)){// 非空校验
                if(userDao.updatePwd(userId,newPwd)){
                    result.put("code",1);
                    result.put("msg","密码修改成功！");
                }else{
                    result.put("code",0);
                    result.put("msg","密码修改失败！");
                }
            }
        }else{
            result.put("code",-1);
            result.put("msg","旧密码输入错误！");
        }

        // 响应结果
        response.getWriter().write(new Gson().toJson(result));
    }
}
